package com.suning.sawp.intf.dao;

import java.util.Date;
import java.util.List;

import com.suning.sawp.dto.promotion.HorizProCouponParam;
import com.suning.sawp.dto.promotion.StatisticsHorCoupon;
import com.suning.sawp.po.promotion.HorizProActivity;
import com.suning.sawp.po.promotion.HorizProCoupon;
import com.suning.sawp.po.promotion.HorizProRecord;

/**
 * 
 * 异业促销券数据库操作<br> 
 * 〈功能详细描述〉
 * 涉及表
 * HorizProActivity（异业促销活动记录）
 * HorizProCoupon （异业优惠券记录）
 * HorizProRecord （异业券导入记录表）
 * @author 12061818
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public interface HorizPromotionDaoService {
    /**
     * 
     * 功能描述: 根据促销活动ID查询促销活动信息<br>
     * 〈功能详细描述〉
     *
     * @param activityId
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    HorizProActivity findHorizProActivityByActivityId(String activityId);
    
    /**
     * 
     * 功能描述: 新增促销活动<br>
     * 〈功能详细描述〉
     *
     * @param horizProActivity
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void addHorizProActivity(HorizProActivity horizProActivity);
    
    /**
     * 
     * 功能描述: 查询促销活动信息（分页）<br>
     * 〈功能详细描述〉
     *
     * @param activityName
     * @param proActivityId
     * @param startTime
     * @param endTime
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<HorizProActivity> findActivity4Page(String activityName, 
            String proActivityId, Date startTime, Date endTime, int startIndex, int limit);
    
    /**
     * 
     * 功能描述: 统计符合查询条件的活动总记录数<br>
     * 〈功能详细描述〉
     *
     * @param activityName
     * @param proActivityId
     * @param startTime
     * @param endTime
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    int countHorizProActivity(String activityName, 
            String proActivityId, Date startTime, Date endTime);
    
    /**
     * 
     * 功能描述: 更新促销活动信息实际导入券量<br>
     * 〈功能详细描述〉
     *
     * @param staffId 工号
     * @param proActivityId 促销活动ID
     * @param importCount 导入券数量
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void updateActivityActualActCount(String staffId, String proActivityId, int importCount);
    
    /**
     * 
     * 功能描述: 根据导入批次号删除导入的优惠券<br>
     * 〈功能详细描述〉
     *
     * @param importBatch
     * @return 本次删除的券数量
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    int deleteHorizCouponByimpBatchCd(String importBatch);
    
    /**
     * 
     * 功能描述: 查询某活动的异业券导入记录<br>
     * 〈功能详细描述〉
     * 
     * @param activityId 促销活动编码
     * @param staffId 操作人工号
     * @param startIndex
     * @param limit
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<HorizProRecord> findHorizProRecords(String activityId, 
            String staffId, int startIndex, int limit);
    
    /**
     * 
     * 功能描述: 统计异业券导入记录数<br>
     * 〈功能详细描述〉
     *
     * @param activityId
     * @param staffId
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    int countHorizProRecord(String activityId, String staffId);
    
    /**
     * 
     * 功能描述: 变更活动启用状态<br>
     * 〈功能详细描述〉
     *
     * @param activityId
     * @param optCode
     * @param staffId
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void updateActivityStatus(String activityId, String optCode, String staffId);
    
    /***
     * 
     * 功能描述: 根据券号查询异业优惠券信息<br>
     * 〈功能详细描述〉
     *
     * @param horizId
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    HorizProCoupon queryHorizCouponByHorId(String horizId);
    
    /**
     * 
     * 功能描述: 更新优惠券信息<br>
     * 〈功能详细描述〉
     *
     * @param horizId
     * @param custNum
     * @param mobile
     * @param staffId
     * @param regionCode
     * @param regionName
     * @param storeCode
     * @param storeName
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void updateHorizProCoupon(HorizProCouponParam couponParam);
    
    /**
     * 
     * 功能描述: 增加券发放数量<br>
     * 〈功能详细描述〉
     *
     * @param activityId
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void incrActivityHasSend(String activityId);
    
    /**
     * 
     * 功能描述: 统计某位店员下所属的优惠券总记录<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    int countHorizProCouponByStaffId(String staffId);
    
    /**
     * 
     * 功能描述: 查询归属于某位店员的验券记录（分页）<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @param startIndex
     * @param limit
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<HorizProCoupon> findHorizProCouponsByStaffId(String staffId
            , int startIndex, int limit);
    
    /**
     * 
     * 功能描述: 根据批次码删除导入记录<br>
     * 〈功能详细描述〉
     *
     * @param importBacth
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void deleteHorizRecordByImportBatch(String importBacth);
    
    /**
     * 
     * 功能描述: 统计已经验过券的券记录数<br>
     * 〈功能详细描述〉
     *
     * @param startTime
     * @param endTime
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    int countValidHorizCoupon(Date startTime, Date endTime);
    
    /**
     * 
     * 功能描述: 查询已经验券的异业券记录<br>
     * 〈功能详细描述〉
     *
     * @param startTime
     * @param endTime
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<HorizProCoupon> findValidHorizProCoupons(Date startTime, Date endTime);
    
    /**
     * 修改活动详情生成券地址文件路径
     * @param activityId
     * @param fileUrl
     */
    void updateActivityCouponFileUrl(String activityId, String fileUrl, Integer actualActCount);
    
    /**
     * 
     * 功能描述: 异业券统计查询数量<br>
     * 〈功能详细描述〉
     *
     * @param activityName
     * @param regionCode
     * @param storeCode
     * @param startTime
     * @param endTime
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    int countStatisHorizCoupon(String activityName,String regionCode,String storeCode,Date startTime,Date endTime);
    
    /**
     * 
     * 功能描述: 异业券统计<br>
     * 〈功能详细描述〉
     *
     * @param activityName
     * @param regionCode
     * @param storeCode
     * @param startTime
     * @param endTime
     * @param startIndex
     * @param limit
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<StatisticsHorCoupon> statisHorizCoupon(String activityName,String regionCode,String storeCode,Date startTime,Date endTime,Integer startIndex, Integer limit);
}
